
# con algoritmo de Floyd

import networkx as nx
g = nx.DiGraph()
g1 = nx.Graph()

f=open("arch.txt")
arreglo = f.readlines()

i=0
nodos = []
arreglos = [0]*len(arreglo)
for i in range (len(arreglo)):
    g.add_edge(arreglo[i].split(" ")[0],arreglo[i].split(" ")[1],weight=int(arreglo[i].split(" ")[2]))
    g1.add_edge(arreglo[i].split(" ")[0],arreglo[i].split(" ")[1],weight=int(arreglo[i].split(" ")[2]))

predecesor1, distance1 = nx.floyd_warshall_predecessor_and_distance(g1)
predecesor, distance = nx.floyd_warshall_predecessor_and_distance(g)
distancias = distance
#print distancias['Antigua']
print g.nodes()
print g.edges()
opcion=0
while (opcion!=4):
    print "MENU\n1. Distancia entre ciudad1 y ciudad2, y ciudades intermedias\n2. Centro de la ciudad\n3. Modificar grafo\n4. Salir"
    opcion=int(input())
    
    if (opcion==1):
        ciudad1 = raw_input("Ingrese la primera ciudad: ")
        ciudad2 = raw_input("Ingrese la segunda ciudad: ")
        i=0
            
        vecinos = g.neighbors(ciudad1)
        peso = 0
        if ciudad1!=ciudad2:
            
            peso = g[ciudad1][ciudad2]['weight']

                
        else:
            peso = 0
        print "La distancia entre " + str(ciudad1) +" y " + str(ciudad2) + " es: " + str(peso)
        verdad = 0
        for i in range(len(vecinos)):
            if (vecinos[i]==ciudad2):
                print "No tiene ciudades intermedias "
                verdad=1
            
        if (verdad == 0 and ciudad1!=ciudad2):
            if (len(g.neighbors(ciudad1))!=0):
                i=0
                for i in range(len(g.neighbors(ciudad1))):
                    print vecinos[i]           
        elif (verdad == 2):
            print "No tiene ciudades intermedias "
        print
   

    if (opcion==2):
        print "El centro del grafo es: "+ str(nx.center(g1,e=None)[0])
        print
            
    if (opcion==3):
        print "1. Agregar interrupcion para dos ciudades\n2. Agregar dos ciudades"
        opcion2 = int(input())
        ciudadUno = raw_input("Ingrese la primera ciudad: ")
        ciudadDos = raw_input("Ingrese la segunda ciudad: ")
        pesoNuevo = int(input("Ingrese la distancia: "))
        g.add_edge(ciudadUno,ciudadDos,weight=int(pesoNuevo))
        print g
        predecesor, distance = nx.floyd_warshall_predecessor_and_distance(g)
        predecesor1, distance1 = nx.floyd_warshall_predecessor_and_distance(g1)
        print distance

    
        
            
            
  

    #print g.neighbors(ciudad1)
    #print g.predecessors(ciudad1)
    #print g.predecessors(ciudad2)
